Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja poprawiające znaczniki <img> (Wyrażenia regularne)
ladovnik
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Witam. Zrobiłem funkcję, która poprawia znaczniki <img> w kodzie strony, mianowicie dodaje do nich atrybut alt (Takie są standardy W3C). Problem w tym, że do tych które mają już alt też dodaje... nie wiem jak zrobić, aby znaczniki z alt były pomijane... tzn. wiem, trzeba użyć negacji, ale z negacją zawsze miałem problemy... Pomoże mi ktoś?

Kod funkcji:
  1. <?php
  2. function FixImgTags($str)
  3. {
  4.    $str=preg_replace("#<img(.*?)>#si","<img$1 alt=\"Image\">",$str);
  5.    
  6.    return $str;
  7. }
  8. ?>


Pozdrawiam,
ladovnik

Ten post edytował ladovnik 2.02.2009, 20:08:07
Go to the top of the page
+Quote Post
Wave
post
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

Ostrzeżenie: (0%)
-----


Ja bym wywalal wszystkie alty pregiem i wrzucal na nowo, bo regexa do tego nie wiem czy ulozysz (nie wiem czy przy negacji wtecznej możesz stosować nieokreślone zbiory).
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Możesz wskazać mi w dokumentacji W3C fragment, który by informował o tym, że należy zrobić coś takiego jak Ty? To co robisz nie ma najmniejszego związku z W3C.

Co do problemu samego w sobie: preg_replace_callback" title="Zobacz w manualu PHP" target="_manual i przed zmianą sprawdzasz czy aby przypadkiem nie ma już alta.
Go to the top of the page
+Quote Post
Wave
post
Post #4





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

Ostrzeżenie: (0%)
-----


http://www.w3.org/TR/WCAG10-HTML-TECHS/#im...text-equivalent
Go to the top of the page
+Quote Post
zegarek84
post
Post #5





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Kod
$dane='<img src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" alt="smile.gif" border="0"/><img src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" border="0" />';
$dane=preg_replace(array('/ alt\=".*?"/si','/<img([^>]*?) ?\/?>/si'),array('','<img alt="Image"\1 />'),$dane);
echo $dane;

daje:
Kod
<img alt="Image" src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" border="0" /><img alt="Image" src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" border="0" />
Go to the top of the page
+Quote Post
Smoker
post
Post #6





Grupa: Zarejestrowani
Postów: 101
Pomógł: 5
Dołączył: 15.10.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


w html'u nie jest błędem użycie img bez alt'a ! Do najnowszej części html'a czyli teraz chyba 4.01 bynajmniej wiem ze nie jest (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Czyli spokojnie mozesz nie miec alt'a. Chyba ze strona opiera się na xhtml'u wtedy niezaleznie od wersji xhtml'a z ktorej kozystasz brak alt'a jest błędem. czyli tak w skrócie:

HTML - nie musisz mieć alt'a
xHTML - musisz mieć alt'a

A co do podmiany to mozesz sprobowac cos z if'em typu
Kod
if(nie ma alt'a){
wstaw go;
}
else{
nic nie rób
}


Ale to tylko taka mała propozycja toku mojego toku myślenia. Sam dopiero zaczynam z php wiec jeszcze Ci tego nie napisze w gotowym skrypcie ale mam nadzieje ze to pomoze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Foxx
post
Post #7





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Upraszczając nieco:
  1. <?php
  2. $str = '<img src="costam">';
  3.  
  4. if(preg_match('/alt/', $str) == 0){
  5.   echo preg_replace("#<img(.*?)>#si","<img$1 alt=\"Image\">",$str);
  6. } else {
  7.   echo $str;
  8. }
  9. ?>


Aby obsłużyć także przypadek pustego tagu alt (alt="") można zrobić tak:

  1. <?php
  2. $str = '<img src="costam" alt="">';
  3.  
  4. if(preg_match('/alt/', $str) == 0){
  5.    echo preg_replace("#<img(.*?)>#si","<img$1 alt=\"Image\">",$str);
  6. } elseif(preg_match('/alt=""/', $str) == 1){
  7.    echo preg_replace('/alt=""/', 'alt="Image2"', $str);
  8. } else {
  9.    echo $str;
  10. }
  11. ?>
Go to the top of the page
+Quote Post
ladovnik
post
Post #8





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Ohoho, ile postów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A więc po kolei:
Wave - Jeśli chodzi o Twój pierwszy sposób z wywaleniem wszystkich altów i dodaniem ich na nowo też tak myślałem, ale jeżeli wcześniej były nadane konkretne alty np. alt="Kliknij aby coś tam" to raczej nie wskazane jest je usuwać.
Crozin - Wave już ci odpisał. Ja używam xHTML 4.01 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Foxx przeanalizuję Twój przykład i niedługo Wam odpiszę, czy jest to rozwiązanie problemu (obecnie niestety muszę wyłączyć komputer...).

EDYCJA:
Niestety, Twoje rozwiązanie Foxx było by dobre, ale tylko dla jednego tagu IMG, ponieważ jeśli zmienna $str będzie zawierać:
  1. <?php
  2. $str="<html>
  3. <head>
  4. <title>Test</title>
  5. </head>
  6. <body>
  7. <p>Aby to zrobić, należy wcisnąć klawisz alt</p>
  8. <img src=\"obraz.png\">
  9. <img src=\"obraz.png\" width=\"8\" height=9>
  10. <img src=\"obraz.png\" width=\"666\" height=\"986\" border=0>
  11. <img src=\"obraz.png\" alt=\"tekst\">
  12. <img src=\"obraz.png\" alt=\"tekst\" border=0>
  13. </body>
  14. </html>";
  15. ?>

Wtedy jeśli gdziekolwiek znajdzie się słowo alt nawet nie w tagu img to on nie zamieni nic, w całym źródle.

Aby Twoje rozwiązanie było dobre dla takiej zmiennej należało by ją podzielić w tablicy tak, aby każdy tag img był w osobnym rekordzie a to co nie jest tagiem img też w osobnych rekordach...

EDYCJA 2:
Problem rozwiązałem przy pomocy explode, preg_match i preg_replace.

Pozdrawiam,
ladovnik

Ten post edytował ladovnik 3.02.2009, 12:24:00
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Crozin - Wave już ci odpisał. Ja używam xHTML 4.01
Widzę, że nikt nie zrozumiał (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
<img ... alt="image" /> nie manic wspólnego z tym co mówi W3C. W alt ma się znaleźć tekst alternatywny, opisujący obrazek jego treści lub ew. działania. Wstawienie tam "image" jest kompletnie pozbawione sensu i IMHO pewnie słży jedynie This page is VALID ... document chociaż tak naprawdę nie będzie to "valid".
W dodatku taki alt, wprowadza więcej złego niż dobrego.

Co do tematu - jak napisałem pobierasz wyr.reg. wszystkie <img> i w callbacku sprawdzasz czy alt już jest.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.10.2025 - 09:51